Purpose: build visual story plots for each basin and climate year

Notes:

5.1 Site info and daily data

View map of sites

Code
# site information and locations
siteinfo <- read_csv("C:/Users/jbaldock/OneDrive - DOI/Documents/USGS/EcoDrought/EcoDrought Working/Data/EcoDrought_SiteInformation.csv")
siteinfo_sp <- st_as_sf(siteinfo, coords = c("long", "lat"), crs = 4326)
mapview(siteinfo_sp, zcol = "designation")

Load and view data structure

Code
# flow/yield (and temp) data 
dat <- read_csv("C:/Users/jbaldock/OneDrive - DOI/Documents/USGS/EcoDrought/EcoDrought Working/Data/EcoDrought_FlowTempData_DailyWeekly.csv") %>% filter(!site_name %in% c("Wounded Buck Creek"))

# add water/climate year variables
dat <- add_date_variables(dat, dates = date, water_year_start = 4)

# calculate completeness by site and water year
complete <- dat %>% group_by(site_name, designation, WaterYear) %>% summarize(completeness = sum(!is.na(Yield_filled_mm_7))/365)
dat <- dat %>% left_join(complete)
str(dat)
tibble [202,014 × 37] (S3: tbl_df/tbl/data.frame)
 $ station_no          : chr [1:202014] "12355347" "12355347" "12355347" "12355347" ...
 $ site_name           : chr [1:202014] "Big Creek NWIS" "Big Creek NWIS" "Big Creek NWIS" "Big Creek NWIS" ...
 $ site_id             : chr [1:202014] "BIG" "BIG" "BIG" "BIG" ...
 $ basin               : chr [1:202014] "Flathead" "Flathead" "Flathead" "Flathead" ...
 $ subbasin            : chr [1:202014] "Big Creek" "Big Creek" "Big Creek" "Big Creek" ...
 $ region              : chr [1:202014] "Flat" "Flat" "Flat" "Flat" ...
 $ lat                 : num [1:202014] 48.6 48.6 48.6 48.6 48.6 ...
 $ long                : num [1:202014] -114 -114 -114 -114 -114 ...
 $ elev_ft             : num [1:202014] 3528 3528 3528 3528 3528 ...
 $ area_sqmi           : num [1:202014] 73.6 73.6 73.6 73.6 73.6 ...
 $ designation         : chr [1:202014] "medium" "medium" "medium" "medium" ...
 $ date                : Date[1:202014], format: "2018-09-10" "2018-09-11" ...
 $ DischargeReliability: num [1:202014] 1 1 1 1 1 1 1 1 1 1 ...
 $ TempReliability     : num [1:202014] 0 0 0 0 0 0 0 0 0 0 ...
 $ flow_mean           : num [1:202014] 30.3 29.1 29 31.2 32.3 ...
 $ flow_min            : num [1:202014] 28.4 28.4 28.2 29.6 30.3 29.1 29 29.5 28.9 28.3 ...
 $ flow_max            : num [1:202014] 31.5 29.7 30.5 33 34.1 31.4 31.3 32.2 30.1 29.5 ...
 $ tempc_mean          : num [1:202014] NA NA NA NA NA NA NA NA NA NA ...
 $ tempc_min           : num [1:202014] NA NA NA NA NA NA NA NA NA NA ...
 $ tempc_max           : num [1:202014] NA NA NA NA NA NA NA NA NA NA ...
 $ flow_mean_filled    : num [1:202014] 30.3 29.1 29 31.2 32.3 ...
 $ flow_mean_cms       : num [1:202014] 0.857 0.825 0.821 0.885 0.915 ...
 $ flow_mean_filled_cms: num [1:202014] 0.857 0.825 0.821 0.885 0.915 ...
 $ area_sqkm           : num [1:202014] 191 191 191 191 191 ...
 $ Yield_mm            : num [1:202014] 0.389 0.374 0.372 0.401 0.415 ...
 $ Yield_filled_mm     : num [1:202014] 0.389 0.374 0.372 0.401 0.415 ...
 $ flow_mean_7         : num [1:202014] NA NA NA 30.3 30.4 ...
 $ flow_mean_filled_7  : num [1:202014] NA NA NA 30.3 30.4 ...
 $ tempc_mean_7        : num [1:202014] NA NA NA NA NA NA NA NA NA NA ...
 $ Yield_mm_7          : num [1:202014] NA NA NA 0.389 0.39 ...
 $ Yield_filled_mm_7   : num [1:202014] NA NA NA 0.389 0.39 ...
 $ CalendarYear        : num [1:202014] 2018 2018 2018 2018 2018 ...
 $ Month               : num [1:202014] 9 9 9 9 9 9 9 9 9 9 ...
 $ MonthName           : Factor w/ 12 levels "Apr","May","Jun",..: 6 6 6 6 6 6 6 6 6 6 ...
 $ WaterYear           : num [1:202014] 2019 2019 2019 2019 2019 ...
 $ DayofYear           : num [1:202014] 163 164 165 166 167 168 169 170 171 172 ...
 $ completeness        : num [1:202014] 0.43 0.43 0.43 0.43 0.43 ...

View little and medium g time series data (yield), by basin and site

Code
mysubbasins <- unique(dat$subbasin)[-c(4,5,9)]
myplots <- list()
for (i in 1:length(mysubbasins)) {
  myplots[[i]] <- dat %>% filter(designation %in% c("little", "medium"), subbasin == mysubbasins[i]) %>% ggplot() + geom_line(aes(x = date, y = log(Yield_filled_mm_7))) + facet_wrap(~site_name)
}

View little and medium g time series data (yield), by basin. Use the handles below the x-axis to change the time frame.

Code
mysubbasins <- unique(dat$subbasin)[-c(4,5,9)]
myplots <- list()
for (i in 1:length(mysubbasins)) {
  myplots[[i]] <- dat %>% filter(designation %in% c("little", "medium"), subbasin == mysubbasins[i]) %>% mutate(logYield = log(Yield_filled_mm_7)) %>% select(date, site_name, logYield) %>% spread(key = site_name, value = logYield) %>% dygraph() %>% dyRangeSelector() %>% dyAxis("y", label = "ln(Yield, mm)")
}

5.2 Create plotting functions

Write functions to generate residual time series/scatter plot

Code
residualplots <- function(mybasin, CY, little, big) {
  # essential elements
  dat_basin <- dat %>% filter(basin == mybasin)
  
  # create residual data frame
  delta_dat <- dat_basin %>% select(site_name, site_id, basin, region, designation, date, WaterYear, Yield_mm_mean_7) %>% filter(site_name %in% little, WaterYear == CY) %>% 
    left_join(dat_basin %>% select(basin, site_name, date, WaterYear, Yield_mm_mean_7) %>% filter(site_name == big, WaterYear == CY) %>% rename(bigyield = Yield_mm_mean_7) %>% select(-site_name)) %>% 
    mutate(delta_yield = log(Yield_mm_mean_7) - log(bigyield), site_name = factor(site_name, levels = little)) %>% 
    group_by(site_name) %>% mutate(cum_resid = cumsum(coalesce(delta_yield, 0)) + delta_yield*0) 
  
  # base plot
  p1 <- delta_dat %>% 
    filter(WaterYear == CY) %>%
    group_by(site_name) %>%
    mutate(month = month(date), doy = 1:n()) %>% 
    ungroup() %>%
    ggplot(aes(x = log(bigyield), y = log(Yield_mm_mean_7), color = doy)) +
    geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
    geom_point(aes(group = doy)) +
    geom_path() +
    scale_color_gradient2(midpoint = 182, low = "orange", mid = "purple3", high = "orange") +
    facet_wrap(~site_name) +
    xlab("Big G ln(Yield)") + ylab("Little G ln(Yield)") + labs(color = "Days from April 1") +
    theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) 
  
  # animated 
  # p1_anim <- p1 + transition_reveal(along = doy)
  
  # write out - static
  jpeg(paste("Big G Little g/Compare Time Series/BigGLittleG_ScatterByTime", mybasin, "_", CY, ".jpg", sep = ""), height = 10, width = 12, units = "in", res = 500)
  print(p1)
  dev.off()
  
  # write out - animated
  # animate(p1_anim, renderer = gifski_renderer(), height = 10, width = 12, units = "in", res = 500)
  # anim_save(paste("Big G Little g/Compare Time Series/BigGLittleG_ScatterByTime_Animated_", mybasin, "_", CY, ".gif", sep = ""))
  
  # residual time series
  jpeg(paste("Big G Little g/Compare Time Series/BigGLittleG_YieldResiduals_TimeSeries_", mybasin, "_", CY, ".jpg", sep = ""), height = 4, width = 6, units = "in", res = 500)
  print(ggplot(data = delta_dat) + 
    geom_line(aes(x = date, y = delta_yield, group = site_name, color = site_name)) + 
    geom_hline(aes(yintercept = 0), linetype = "dashed") +
    xlab("") + ylab("ln(Yield) residuals (difference from Big G)") + labs(color = "Little g") +
    theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()))
  dev.off()
  
  
  # plot little g cumulative residuals - difference from Big G by site
  jpeg(paste("Big G Little g/Compare Time Series/BigGLittleG_YieldResiduals_Cumulative_TimeSeries_", mybasin, "_", CY, ".jpg", sep = ""), height = 4, width = 6, units = "in", res = 500)
  print(delta_dat %>% 
    ggplot() + 
    geom_line(aes(x = date, y = cum_resid, group = site_name, color = site_name)) + 
    geom_hline(aes(yintercept = 0), linetype = "dashed") +
    xlab("") + ylab("ln(Yield) cumulative residuals ") + labs(color = "Little g") +
    theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()))
  dev.off()
}

Write function to generate flow story plot

Code
bigplotfun <- function(mybasin, mysubbasin, CY, little, big, super, supergyears, mymap, evalyears) {
  #### essential elements
  dat_basin <- dat %>% filter(basin == mybasin)
  months <- c("Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan", "Feb", "Mar")
  fudge <- 0.01 # add small value to deal with 0 flow on log scale

  # clean data...drop all dates that have missing data at any site
  dat_basin_cy_clean <- dat %>% 
    filter(site_name %in% c(little, big), WaterYear == CY) %>% 
    select(date, site_name, Yield_filled_mm_7) %>%
    spread(key = site_name, value = Yield_filled_mm_7) %>% 
    drop_na() %>%
    gather(key = site_name, value = Yield_filled_mm_7, 2:ncol(.))
  dat_basin_cy_clean <- fill_missing_dates(dat_basin_cy_clean, dates = "date", groups = "site_name", pad_ends = FALSE)
  
  # get among-year yield min/max for y-axis limits
  dat_basin_sub <- dat %>% 
    filter(site_name %in% c(little, big), WaterYear %in% evalyears) %>% 
    select(date, WaterYear, site_name, Yield_filled_mm_7) %>%
    spread(key = site_name, value = Yield_filled_mm_7) %>% 
    drop_na() %>%
    gather(key = site_name, value = Yield_filled_mm_7, 3:ncol(.)) %>%
    filter(!is.na(Yield_filled_mm_7)) %>% 
    mutate(Yield_filled_mm_7_log = log(Yield_filled_mm_7+fudge)) 
  yield_lim <- range(dat_basin_sub$Yield_filled_mm_7_log)
  
  
  # clean months
  cleanmonths <- unlist(dat_basin_cy_clean %>% filter(site_name == little[1]) %>% drop_na() %>% left_join(dat_basin %>% select(date, site_name, MonthName, Month)) %>% group_by(MonthName) %>% summarize(ndays = n()) %>% filter(ndays >= 20) %>% select(MonthName))
  
  #### MAP
  p1 <- mymap
  # print("p1")
  
  #### HYDROGRAPHS IN YIELD
  p2 <- ggplot() + 
    geom_line(data = dat_basin_cy_clean %>% filter(site_name %in% little) %>% mutate(site_name = factor(site_name, levels = little)), aes(x = date, y = log(Yield_filled_mm_7+fudge), group = site_name, color = site_name)) +
    geom_line(data = dat_basin_cy_clean %>% filter(site_name == big), aes(x = date, y = log(Yield_filled_mm_7+fudge)), color = "black", size = 1.25) +
    xlab("Date") + ylab("ln(Yield, mm)") + theme_bw() + ylim(yield_lim) + 
    scale_x_date(limits = as.Date(c(paste(CY-1, '-04-01', sep = ""), paste(CY, '-04-01', sep = "")))) +
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = "none")
  # print("p2")
  
  
  #### TOTAL ANNUAL YIELD
  # get total yield per year and convert to percentiles
  yeartotals <- dat_basin %>% 
    filter(site_name == super, WaterYear %in% supergyears) %>% 
    group_by(WaterYear) %>% 
    summarize(totalyield = sum(Yield_filled_mm, na.rm = TRUE)) %>%
    filter(!is.na(totalyield)) %>%
    mutate(percentile = percent_rank(totalyield))
  p3 <- ggplot() + 
    geom_line(data = yeartotals, aes(x = WaterYear, y = totalyield), color = "grey40") + 
    geom_point(data = yeartotals %>% filter(WaterYear == CY), aes(x = WaterYear, y = totalyield)) +
    xlab("Climate year") + ylab("Total annual yield (mm)") + theme_bw() + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
  # print("p3")
  
  
  #### EXCEEDANCE PROBABILITY - SUPER G PERIOD OF RECORD
  exceedance <- dat_basin %>% 
    filter(site_name %in% c(little, big, super)) %>%
    filter(!is.na(Yield_filled_mm_7)) %>% 
    mutate(Yield_filled_mm_7_log = log(Yield_filled_mm_7)) %>%
    group_by(site_name, WaterYear) %>% 
    arrange(desc(Yield_filled_mm_7_log), .by_group = TRUE) %>% 
    mutate(exceedance = 100/length(Yield_filled_mm_7_log)*1:length(Yield_filled_mm_7_log)) %>%
    ungroup()
  p4 <- ggplot() + 
    geom_line(data = exceedance %>% filter(site_name == super, WaterYear %in% supergyears), aes(x = exceedance, y = Yield_filled_mm_7_log, group = WaterYear, color = WaterYear), size = 0.25) +
    geom_line(data = exceedance %>% filter(site_name == super, WaterYear == CY), aes(x = exceedance, y = Yield_filled_mm_7_log), color = "black", size = 1.25) +
    geom_text(aes(x = 50, y = Inf, label = paste("Super G: ", super, " (", min(supergyears), "-", max(supergyears), ")", "\nCurrent year: ", CY, " (", round(yeartotals$percentile[yeartotals$WaterYear == CY]*100), "th perc.)", sep = "")), vjust = 1.2) +
    scale_color_continuous(trans = "reverse") +
    xlab("Exceedance probability") + ylab("ln(Yield, mm)") + labs(color = "Climate year") + theme_bw() + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = c(0.15,0.23), 
          legend.text = element_text(size = 9), legend.title = element_text(size = 9), legend.key.height = unit(0.4, "cm"))
  # print("p4")
  
  
  #### CUMULATIVE YIELD RESIDUALS
  # get range of residuals among years
  dat_basin_res <- dat_basin_sub %>% 
    filter(site_name %in% little, WaterYear %in% evalyears) %>% select(site_name, date, WaterYear, Yield_filled_mm_7) %>%
    left_join(dat %>% filter(site_name == big) %>% rename(bigyield = Yield_filled_mm_7) %>% select(date, WaterYear, bigyield)) %>% 
    mutate(delta_yield = log(Yield_filled_mm_7+fudge) - log(bigyield+fudge), site_name = factor(site_name, levels = little)) %>% 
    group_by(site_name, WaterYear) %>% mutate(cum_resid = cumsum(coalesce(delta_yield, 0)) + delta_yield*0) 
  res_lim <- range(dat_basin_res$cum_resid, na.rm = TRUE)
  p5 <- dat_basin_cy_clean %>% filter(site_name %in% little) %>% 
    left_join(dat_basin_cy_clean %>% filter(site_name == big) %>% rename(bigyield = Yield_filled_mm_7) %>% select(-site_name)) %>% 
    mutate(delta_yield = log(Yield_filled_mm_7+fudge) - log(bigyield+fudge), site_name = factor(site_name, levels = little)) %>% 
    group_by(site_name) %>% mutate(cum_resid = cumsum(coalesce(delta_yield, 0)) + delta_yield*0) %>%
    ggplot() + 
    geom_line(aes(x = date, y = cum_resid, group = site_name, color = site_name)) + 
    geom_hline(aes(yintercept = 0), linetype = "dashed") +
    xlab("Date") + ylab("ln(Yield) cumulative residuals ") + ylim(res_lim) +
    scale_x_date(limits = as.Date(c(paste(CY-1, '-04-01', sep = ""), paste(CY, '-04-01', sep = "")))) +
    theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = "none")
  # print("p5")

  
  #### EXCEEDANCE PROBABILITY - BIG G/LITTLE G CURRENT YEAR
  exceedance <- dat_basin_cy_clean %>% 
    filter(site_name %in% c(little, big)) %>%
    filter(!is.na(Yield_filled_mm_7)) %>% 
    mutate(Yield_filled_mm_7_log = log(Yield_filled_mm_7+fudge)) %>%
    group_by(site_name) %>% 
    arrange(desc(Yield_filled_mm_7_log), .by_group = TRUE) %>% 
    mutate(exceedance = 100/length(Yield_filled_mm_7_log)*1:length(Yield_filled_mm_7_log)) %>%
    ungroup()
  p6 <- ggplot() + 
    geom_line(data = exceedance %>% filter(site_name %in% little) %>% mutate(site_name = factor(site_name, levels = little)), aes(x = exceedance, y = Yield_filled_mm_7_log, group = site_name, color = site_name)) +
    geom_line(data = exceedance %>% filter(site_name == big), aes(x = exceedance, y = Yield_filled_mm_7_log), color = "black", size = 1.25) +
    xlab("Exceedance probability") + ylab("ln(Yield, mm)") + labs(color = "Little g") + theme_bw() + ylim(yield_lim) + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = "none")
  # print("p6")
  
  
  #### EXCEEDANCE PROBABILITY MONTHLY
  exceedance_monthly <- dat_basin_cy_clean %>% 
    filter(site_name %in% c(little, big)) %>%
    filter(!is.na(Yield_filled_mm_7)) %>% 
    left_join(dat_basin %>% select(date, site_name, MonthName, Month)) %>%
    mutate(Yield_filled_mm_7_log = log(Yield_filled_mm_7+fudge),
           site_name = factor(site_name, levels = c(little, big)),
           MonthName = factor(MonthName, levels = months)) %>%
    group_by(site_name, Month) %>% 
    arrange(desc(Yield_filled_mm_7_log), .by_group = TRUE) %>% 
    mutate(exceedance = 100/length(Yield_filled_mm_7_log)*1:length(Yield_filled_mm_7_log)) %>%
    ungroup()
  exceedance_monthly2 <- exceedance_monthly %>% mutate(Yield_filled_mm_7_log = ifelse(MonthName %in% cleanmonths, Yield_filled_mm_7_log, NA))
  p7 <- ggplot() + 
    geom_line(data = exceedance_monthly2 %>% filter(site_name %in% little), aes(x = exceedance, y = Yield_filled_mm_7_log, group = site_name, color = site_name)) +
    geom_line(data = exceedance_monthly2 %>% filter(site_name == big), aes(x = exceedance, y = Yield_filled_mm_7_log), color = "black", size = 1.25) +
    facet_wrap(~ factor(MonthName), nrow = 2) + 
    xlab("Exceedance probability") + ylab("ln(Yield, mm)") + labs(color = "Little g") + theme_bw() +  ylim(yield_lim) + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = "none")
  # print("p7")
  
  
  #### ANNUAL BIG-LITTLE DIFFERENCE
  mypvals <- tibble(type =  rep(NA, times = length(little)), 
                    month = rep(NA, times = length(little)),
                    site_name = rep(NA, times = length(little)), 
                    stat = rep(NA, times = length(little)),
                    pval = rep(NA, times = length(little)))
  for (i in 1:length(little)) {
    mytest <- ks.test(exceedance$Yield_filled_mm_7_log[exceedance$site_name == big],
                      exceedance$Yield_filled_mm_7_log[exceedance$site_name == little[i]], exact = TRUE)
    mypvals$type <- "annual"
    mypvals$month <- 0
    mypvals$site_name[i] <- little[i]
    mypvals$stat[i] <- mytest$statistic
    mypvals$pval[i] <- mytest$p.value
  }
  p8 <- mypvals %>% 
    mutate(site_name = factor(site_name, levels = little)) %>% 
    ggplot() + 
    geom_boxplot(aes(x = month, y = pval, group = month), fill = "grey90", outlier.shape = NA) +
    geom_point(aes(x = jitter(month, factor = 10), y = pval, color = site_name), size = 2) +
    ylim(0,1) + geom_hline(yintercept = 0.05, linetype = "dashed") +
    xlab("") + ylab("Kolmogorov-Smirnov test p-value") + scale_x_continuous(labels = "Annual", breaks = 0) +
    theme_bw() + theme(axis.title.x = element_blank(), panel.grid.minor = element_blank(), legend.position = "none")
  # print("p8")
  
  
  #### MONTHLY BIG-LITTLE DIFFERENCE
  mypvals_monthly_list <- list()
  for (i in 1:length(little)) {
    mypvals_monthly <- tibble(type =  rep(NA, times = 12), 
                              month = rep(NA, times = 12),
                              site_name = rep(NA, times = 12), 
                              stat = rep(NA, times = 12),
                              pval = rep(NA, times = 12))
    for (j in 1:12) {
      big_exc <- exceedance_monthly$Yield_filled_mm_7_log[exceedance_monthly$site_name == big & exceedance_monthly$MonthName == months[j]]
      lit_exc <- exceedance_monthly$Yield_filled_mm_7_log[exceedance_monthly$site_name == little[i] & exceedance_monthly$MonthName == months[j]]
      if(length(lit_exc) < 20) {
        mypvals_monthly$site_name[j] <- little[i]
        mypvals_monthly$type <- "monthly"
        mypvals_monthly$month[j] <- months[j]
        mypvals_monthly$stat[j] <- NA
        mypvals_monthly$pval[j] <- NA
      } else {
        mytest <- ks.test(big_exc, lit_exc, exact = TRUE)
        mypvals_monthly$site_name[j] <- little[i]
        mypvals_monthly$type <- "monthly"
        mypvals_monthly$month[j] <- months[j]
        mypvals_monthly$stat[j] <- mytest$statistic
        mypvals_monthly$pval[j] <- mytest$p.value
      }
    }
    mypvals_monthly_list[[i]] <- mypvals_monthly
  }
  mypvals_monthly <- do.call(rbind, mypvals_monthly_list) %>% 
    mutate(site_name = factor(site_name, levels = little),
           month = factor(month, levels = months), 
           month_num = as.numeric(month)) 
  # compute the loess
  # dum <- rbind(mypvals_monthly %>% mutate(month_num = month_num-12),
  #              mypvals_monthly,
  #              mypvals_monthly %>% mutate(month_num = month_num+12)) 
  # mylo <- loess(pval ~ month_num, dum, span = 0.25)
  # plot(pval ~ month_num, dum)
  # j <- order(dum$month_num)[(dim(mypvals_monthly)[1]+1):(dim(mypvals_monthly)[1]+dim(mypvals_monthly)[1])]
  # lines(dum$month_num[j], mylo$fitted[j], col = "red")
  # the plot
  p9 <- mypvals_monthly %>% 
    ggplot() + 
    geom_boxplot(aes(x = month, y = pval, group = month), fill = "grey90", outlier.shape = NA) +
    # geom_line(aes(x = dum$month_num[j], y = mylo$fitted[j]), linewidth = 1.25) +
    geom_smooth(aes(x = month_num, y = pval), linewidth = 1.25, color = "black", se = FALSE) +
    geom_point(aes(x = jitter(month_num), y = pval, color = site_name), size = 2) +
    ylim(0,1) + geom_hline(yintercept = (0.05), linetype = "dashed") +
    xlab("") + ylab("") + 
    labs(color = "") + theme_bw() + 
    theme(axis.title.x = element_blank(), axis.text.y = element_blank(), panel.grid.minor = element_blank())
  # print("p9")
  
  
  #### BIG PLOT
  bigp <- ggarrange(ggarrange(mymap, ggarrange(NA, p2, nrow = 2, heights = c(0.2,1))),
                    ggarrange(p3, p4), 
                    ggarrange(p5, p6),
                    p7, 
                    ggarrange(p8, p9, widths = c(0.13, 0.85)), nrow = 5, heights = c(1.2,0.9,0.9,1.2,0.9))
  # print("big plot!")
  # write out
  # jpeg(paste("Big G Little g/Compare Distributions/BigGLittleG_BigPlot_", mybasin, "_", mysubbasin, "_", CY, ".jpg", sep = ""), height = 18, width = 10, units = "in", res = 500)
  # annotate_figure(bigp, fig.lab = "The West Brook, CY 2021", fig.lab.pos = "top.right", fig.lab.size = 24)
  print(annotate_figure(bigp, top = text_grob(paste(mybasin, ", CY ", CY, sep = ""), x = 0.75, y = -0.5, just = "centre", size = 24)))
  # dev.off()
}

5.3 Create map objects

5.4 Flow story plots

Generate streamflow story plots by basin and climate year

5.4.1 West Brook

5.4.2 Staunton River

5.4.3 Paine Run

5.4.4 Big Creek, Flathead

5.4.5 Spread Creek, Snake

5.4.6 Shields River

5.4.7 Donner-Blitzen